const webpack = require("webpack");
//打包配置自动忽略console.log等
const TerserPlugin = require("terser-webpack-plugin");
// 配置链接 https://cli.vuejs.org/zh/config/
module.exports = {
    // 部署应用包时的基本 URL
    publicPath: process.env.NODE_ENV === "production" ? "" : "/",
    // 是否需要生产环境的 source map
    productionSourceMap: false,
    chainWebpack: (config) => {
        config.plugin("html").tap((args) => {
            // 设置网页标题
            args[0].title = "vue & vue cli 3 项目初始化模板";
            return args;
        });
        // 全局引用axios
        config.plugin("provide").use(webpack.ProvidePlugin, [
            {
                axios: "axios",
            },
        ]);
    },
    css: {
        loaderOptions: {
            // 引用并配置postcss-px2rem-exclude
            postcss: {
                plugins: [
                    require("postcss-px2rem-exclude")({
                        remUnit: 100, // 1rem = 100px
                        remPrecision: 2, // 保留两位小数
                        // exclude: /node_modules|folder_name/i,// 排除 node_modules 和 folder_name 文件夹
                    }),
                ],
            },
            sass: {
                // 引用sass全局文件
                // 根据自己样式文件的位置调整
                prependData: `@import "@/assets/css/scss.scss";`,
            },
        },
    },
    configureWebpack: (config) => {
        if (process.env.NODE_ENV === "production") {
            return {
                plugins: [
                    //打包环境去掉console.log
                    new TerserPlugin({
                        cache: true, // 启用缓存以提高构建性能。
                        sourceMap: false, // 设置为 false 表示不生成 source map 文件。
                        parallel: true, // 设置为 true 表示使用多进程进行代码压缩，这可以提高压缩效率。
                        terserOptions: {
                            warnings: false, // 设置为 false 表示不显示警告信息。
                            compress: {
                                drop_console: true, // 设置为 true就是干掉所有的console.*这些函数的调用. 这个优先级比pure_funcs高
                                drop_debugger: false, // 设置为 false 表示不移除 debugger 语句。
                                pure_funcs: ["console.log"], // 表示只移除 console.log 函数调用。
                            },
                        },
                    }),
                ],
            };
        }
    },
};
